Skip to content

WireGuard 服务端配置

标签
Linux
Linux/命令行
操作系统/Linux
网络/WireGuard
网络/VPN
网络/VPN/WireGuard
操作系统/macOS
命令行/vim
命令行/mkdir
命令行/ip
命令行/sysctl
运维/内核
Linux/内核
运维/网络
运维
计算机网络/组网
命令行/chmod
网络/协议/UDP
字数
1332 字
阅读时间
6 分钟

先决条件

配置 IPv4 转发

要使 NAT 正常工作,我们需要启用 IP 转发: 该命令配置系统选项 net.ipv4.ip_forward 值为 1,表示开启 IPv4 协议下 IP 转发

shell
sudo sysctl -w net.ipv4.ip_forward=1
shell
sysctl -w net.ipv4.ip_forward=1

创建必要的配置目录

WireGuard 的配置目录一般在 /etc/wireguard,但是不同的系统也会有不同的路径:

Linux

shell
sudo mkdir /etc/wireguard
shell
mkdir /etc/wireguard

macOS

shell
sudo mkdir /usr/local/etc/wireguard

Windows

WARNING

title: 警告 🚧 施工中

配置

创建公私密钥对

Linux

shell
wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
shell
wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

macOS

shell
wg genkey | sudo tee /usr/local/etc/wireguard/privatekey | wg pubkey | sudo tee /usr/local/etc/wireguard/publickey

Windows

WARNING

title: 警告 🚧 施工中

创建一个新的 WireGuard 网络接口配置文件

创建配置文件

WireGuard 的 VPN 网络都是通过自行配置网络接口并自动连接实现的,网络接口中设定了诸如我们的 IP、DNS、监听端口等等的参数,这些字段和常规的网络接口配置几乎是一致的。 一般我们把第一个 WireGuard 网络接口称之为 wg0,来自 WireGuard 的缩写 wg 和数字 0,表示:第 0 位 WireGuard 网络设备。 使用 Vim 编辑器创建一个对应的 WireGuard 网络接口配置文件 wg0.conf/etc/wireguard目录下:

shell
sudo vim /etc/wireguard/wg0.conf
shell
vim /etc/wireguard/wg0.conf

填写配置文件

写入接口配置信息:

shell
[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY

# 如果没有启用 firewalld 防火墙服务,可以省略下面两行
PostUp     = firewall-cmd --zone=public --add-port 51820/udp && firewall-cmd --zone=public --add-masquerade
PostDown   = firewall-cmd --zone=public --remove-port 51820/udp && firewall-cmd --zone=public --remove-masquerade

该接口可以命名为任意名称,但建议使用诸如include wg0wgvpn0之类的名称。 网络接口 [Interface] 部分中的设置具有以下含义:

  1. Address: wg0接口的 IPv4 或 IPv6 地址的逗号分隔列表。使用保留给专用网络的范围内的 IP(10.0.0.0/8(包含 10.0.0.0 到 10.255.255.255)、172.16.0.0/12(包含 172.16.0.0 到 172.15.255.255)或 192.168.0.0/16(包含 192.168.0.0 到 192.168.255.255)这样的 IP 格式是什么样的含义可以参考 IP 后面的斜杠是什么?
  2. ListenPort: 在其上使用的端口 WireGuard 将接受传入的连接。
  3. PrivateKey: 由wg genkey命令生成的私钥。 (使用 cat 输出文件 命令获取私钥文件的内容:sudo cat /etc/wireguard/privatekey
  4. SaveConfig: 设置为 true 时,关闭接口时的当前状态保存到配置文件中。
  5. (可选)PostUp: (可选,尤其是在防火墙服务不启动的时候)在启动网络接口 [Interface] 之前执行的命令或脚本。在此示例中,我们使用 firewall-cmd 打开 WireGuard 端口并启用伪装。
  6. (可选)PostDown: (可选,尤其是在防火墙服务不启动的时候)在关闭接口之前执行的命令或脚本,这将允许流量离开服务器,从而使VPN客户端可以访问互联网。网络接口 [Interface] 关闭后,防火墙规则将被删除。

调整配置文件权限

wg0.confprivatekey文件对普通用户不可读。 使用 chmod (参考 chmod 变更权限)将权限设置为600

shell
sudo chmod 600 /etc/wireguard/{privatekey,wg0.conf}
shell
chmod 600 /etc/wireguard/{privatekey,wg0.conf}

测试配置

使用 wg-quick 命令快速将我们刚刚配置好的 wg0 接口设定为「启用」:

shell
sudo wg-quick up wg0
shell
wg-quick up wg0

该命令将输出以下内容:

shell
$ sudo wg-quick up wg0

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0

要查看接口状态和配置,请执行下面的命令:

shell
sudo wg show wg0
shell
wg show wg0

执行效果:

shell
$ sudo wg show wg0
interface: wg0
  public key: My3uqg8LL9S3XZBo8alclOjiNkp+T6GfxS+Xhn5a40I=
  private key: (hidden)
  listening port: 51820

也可以使用 ip 命令来验证接口状态:

shell
ip a show wg0

4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 10.0.0.1/24 scope global wg0
       valid_lft forever preferred_lft forever

激活开机自启

要在启动时自动启用 wg0 网络接口 [Interface],请运行以下命令:

shell
sudo systemctl enable wg-quick@wg0
shell
systemctl enable wg-quick@wg0

错误排查

/usr/bin/wg-quick: line 32: resolvconf: command not found

Debian 11 如果在使用 wg-quick up <interface> 的时候遭遇以下错误:

shell
/usr/bin/wg-quick: line 32: resolvconf: command not found

可以通过下面的命令修复:

shell
sudo apt install openresolv

参考资料

贡献者

页面历史

撰写

布局切换

调整 VitePress 的布局样式,以适配不同的阅读习惯和屏幕环境。

全部展开
使侧边栏和内容区域占据整个屏幕的全部宽度。
全部展开,但侧边栏宽度可调
侧边栏宽度可调,但内容区域宽度不变,调整后的侧边栏将可以占据整个屏幕的最大宽度。
全部展开,且侧边栏和内容区域宽度均可调
侧边栏宽度可调,但内容区域宽度不变,调整后的侧边栏将可以占据整个屏幕的最大宽度。
原始宽度
原始的 VitePress 默认布局宽度

页面最大宽度

调整 VitePress 布局中页面的宽度,以适配不同的阅读习惯和屏幕环境。

调整页面最大宽度
一个可调整的滑块,用于选择和自定义页面最大宽度。

内容最大宽度

调整 VitePress 布局中内容区域的宽度,以适配不同的阅读习惯和屏幕环境。

调整内容最大宽度
一个可调整的滑块,用于选择和自定义内容最大宽度。

聚光灯

支持在正文中高亮当前鼠标悬停的行和元素,以优化阅读和专注困难的用户的阅读体验。

ON开启
开启聚光灯。
OFF关闭
关闭聚光灯。

聚光灯样式

调整聚光灯的样式。

置于底部
在当前鼠标悬停的元素下方添加一个纯色背景以突出显示当前鼠标悬停的位置。
置于侧边
在当前鼠标悬停的元素旁边添加一条固定的纯色线以突出显示当前鼠标悬停的位置。